#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
const int N=510;
vector<pair<int,int>> edge[N];
int n,m,w;
int dist[N],cnt[N];
int st[N];
bool spfa()
{
	memset(dist,0x3f,sizeof(dist));
	memset(cnt,0,sizeof(cnt));
	queue<int> q;
	for(int i=1;i<=n;i++)
	{
		q.push(i);
		st[i]=true;
	}
	
	while(q.size())
	{
		int t=q.front();
		q.pop();
		st[t]=false;
		for(auto& e:edge[t])
		{
			int x=e.first;
			if(dist[x]>dist[t]+e.second)
			{
				dist[x]=dist[t]+e.second;
				if(!st[x])
				{
					q.push(x);
					st[x]=true;
					cnt[x]=cnt[t]+1;
				}
				if(cnt[n]>=n)
					return true;
			}
		}
	}
	return false;
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		cin>>n>>m>>w;
		
		for(int i=0;i<m;i++)
		{
			int s,e,t;
			cin>>s>>e>>t;
			edge[s].push_back({e,t});
			edge[e].push_back({s,t});
		}
		for(int i=0;i<w;i++)
		{
			int s,e,t;
			cin>>s>>e>>t;
			edge[s].push_back({e,-t});
		}
		if(spfa())
		{
			cout<<"YES"<<endl;
		}
		else{
			cout<<"NO"<<endl;
		}	
		for(int i=1;i<=n;i++)
		{
			edge[i].clear();
		}		
	}
	

	return 0;
}
